package visitor;

/**
 * @author Fengdong.Duan
 * @create 2023/11/22 17:27
 */
public class Client {
    public static void main(String[] args) {
        //创建ObjectStructure
        ObjectStructure objectStructure = new ObjectStructure();
        objectStructure.addElement(new ConcreteElementA());     // 加入一个男人
        objectStructure.addElement(new ConcreteElementB());     // 加入一个女人
        objectStructure.addElement(new ConcreteElementC());     // 加入一个小孩
        // 创建一个访问者
        Visitor visitor = new ConcreteVisitorA();// 评价成功的
        // 调用  objectStructure.accept(visitor) 时，其实调用的是 Visitor 中的方法，这里发生一次分派，然后在 Visitor 实现类的内部根据
        // 传递进来的 Element 调用 实现类的 accept() 方法，这里发生了第二次分派
        objectStructure.accept(visitor);


        visitor = new ConcreteVisitorB();// 评价失败的
        objectStructure.accept(visitor);
        visitor = new ConcreteVisitorC();
        objectStructure.accept(visitor);


    }
}
